﻿#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//int main()
//{
//	int i = 1;
//	while (i < 100)
//	{
//		if (i % 3 == 0)
//		{
//			printf("%d ", i);
//		}
//		i++;
//	}
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d", &a);
//	scanf("%d", &b);
//	scanf("%d", &c);
//	if (a < b)
//	{
//		int d = a;
//		a = b;
//		b = d;
//	}
//	if (a < c)
//	{
//		int d = a;
//		a = c;
//		c = d;
//	}
//	if (b < c)
//	{
//		int d = b;
//		b = c;
//		c = d;
//
//	}
//	printf("%d %d %d", a, b, c);
//	return 0;
//
//

//int main()
//{
//	int i = 0;
//	for (i = 0; i < 10; i++) 
//	{
//		//即使i++但，每次都会给i赋值为五所以跳不出for循环
//		if (i = 5)
//			printf("%d ", i);
//	}
//	return 0;
//}

//占位符%[]
//：在⽅括号中指定⼀组匹配的字符（⽐如
//
//% [0 - 9]
//），遇到不在集合之中的字符，匹配将会停⽌。
//int main()
//{
//	int a = 0;
//	//只能打印一到九的ASCII码值，超过了会输出随机值
//	scanf("%[1-9]", &a);
//	printf("%d", a);
//	return 0;
//}
//上⾯所有占位符之中，除了
//% c
//以外，都会⾃动忽略起⾸的空⽩字符。
//% c
//不忽略空⽩字符，总是返
//回当前第⼀个字符，⽆论该字符是否为空格。
//如果要强制跳过字符前的空⽩字符，可以写成
//scanf(" %c", &ch)
//，即
//⽰跳过零个或多个空⽩字符。% c
//前加上⼀个空格，表示跳过一个或多个空白字符
//例:
//int main()
//{
//	char a = 0;
//	scanf(" %c", &a);
//	printf("%c", a);
//}
// 
//% s
//，它其实不能简单地等同于字符串。它的规则是，从当前第⼀个⾮空⽩
//字符开始读起，直到遇到空⽩字符（即空格、换⾏符、制表符等）为⽌。
//因为
//% s
//不会包含空⽩字符，所以⽆法⽤来读取多个单词，除⾮多个% s⼀起使⽤。这也意味着，scanf()
//不适合读取可能包含空格的字符串，⽐如书名或歌曲名。另外，
// 符，会在字符串变量末尾存储⼀个空字符\0

//scanf不安全的原因
//scanf()
//将字符串读⼊字符数组时，不会检测字符串是否超过了数组⻓度。所以，储存字符串时，
//很可能会超过数组的边界，导致预想不到的结果。为了防⽌这种情况，使⽤
//读⼊字符串的最⻓⻓度，即写成
//% [m]s
// 例：
//int main()
//{
//	char arr[5] = { 0 };
//	scanf("%s", arr);
//	printf("%s", arr);
//	return 0;
//}
//虽然加了【m】但还是要报错，但读取的数据确实只有m个
//int main()
//{
//	char arr[5] = { 0 };
//		scanf("%5s", arr);
//		printf("%s", arr);
//		return 0;
//
//}
//还得是gets全部读取
// ee不太对
// 例：
//int main()
//{
//	char arr[11] = { 0 };
//	gets("%s", &arr);
//	printf("%s", arr);
//	return 0;
//}
//，其中的% s占位符时，应该指定[m]
//是⼀个整数，表⽰读取字符串的最⼤⻓度，后
//⾯的字符将被丢弃。
//int main()
//{
//	char arr[4] = { 0 };
//	scanf("%s", arr);
//	//这里发现scanf在取数组地址时，没有加取地址符号，因为数组名本身就是地址,所以不需要去地址，但加了也没事
//	printf("%s", arr);
//	return 0;
//}  
// 
// 
// 
// 
//scanf()的输入需要一一对应
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d,%d", &a, &b);
//	printf("%d %d", a, b);
//	//输入为2 2
//	//如果数字用空格隔开输出结果为2 0
//	//但如果是用逗号隔开那就是2 2
//	return 0;
//}
// 
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d-%d", &a, &b);
//	printf("%d %d", a, b);
//	//输入为2 2
//	//如果数字用空格隔开输出结果为2 0
//	//但如果是用-隔开那就是2 2
//	return 0;
//}
//所以说scanf的输入要一一对应
// 
// 
// 
// 
// 
// 
// %[^\n]s表示scanf在读取字符串的时候要遇见\n才停止读取
//int main()
//{
//	char arr[11] = { 0 };
//	scanf("%[^\n]s", arr);
//	printf("%s", arr);
//	return 0;
//}
// 嗯嗯着实不错
//赋值忽略符*
//把*加在%后面就可以了
//例如 %*c的意思就是读取一个字符但会将它忽略掉
//原函数
//int main()
//{
//	int date = 0;
//	int mouth = 0;
//	int year = 0;
//	scanf("%d-%d-%d", &date, &mouth, &year);
//	printf(" %d - %d - %d",  date, mouth, year);
//	return 0;
//}
//忽略函数
//int main()
//{
//	int date = 0;
//	int mouth = 0;
//	int year = 0;
//	scanf("%d%*c%d%*c%d", &date, &mouth, &year);
//	printf(" %d - %d - %d",  date, mouth, year);
//	return 0;
//}
//进阶
//int main()
//{
//	int date = 0;
//	int mouth = 0;
//	int year = 0;
//	//scanf("%d%*s%d%*s%d", &date, &mouth, &year);
//	printf(" %d - %d - %d", date, mouth, year);
//	return 0;
//}
//int main()
//{ 
//	char date[10] = { 0 };
//	char mouth[10] = { 0 };
//	char year[10] = { 0 };
//	scanf("%c%*d%s%*d%s", &date, &mouth, &year);
//	printf(" %c - %s - %s", date, mouth, year);
//	return 0;
//}
//if语句
//在C语言中0表示假非零表示真
//判断一个数是奇数还是偶数
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a % 2 == 0)
//	{
//		printf("是偶数\n");
//	}
//	else
//	{
//		printf("是奇数\n");
//	}
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a % 2 == 0)
//	{
//		printf("是偶数\n");
//	}
//	if(a % 2 == 1)
//	{
//		printf("是奇数\n");
//	}
//	return 0;
//}
//判断一个数是正数还是负数还是零
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a < 0)
//	{
//		printf("是负数\n");
//	}
//	else if (a > 0)
//	{
//		printf("是正数\n");
//	}
//	else
//	{
//		printf("是零\n");
//	}
//
//
//	return 0;
//}
// if语句的嵌套
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a >= 0)
//	{
//		if (a > 0)
//		{
//			printf("a为正数\n");
//		}
//		else
//		{
//			printf("a为零\n");
//		}
//	}
//	else
//	{
//		if(a < 0)
//		{ 
//		printf("a为负数\n");
//		}
//	}
//	return 0;
//}
//==是判断是否相等
//=是赋值号
//输出一个年龄，>= 18输出成年否则输出未成年
//int main()
//{
//	int age = 0;
//	scanf("%d", &age);
//	//if和else语句没有{}的时候只能控制一条语句
//	if (age >= 18)
//	{
//		printf("成年了");
//		printf("可以谈恋爱了\n");
//	}
//	else
//	{
//		printf("未成年，小朋友好好加油，以后考个好大学，我看好你哟");
//	}
//	return 0;
//}
//int main()
//{
//	int a = 3;
//	//当一条if语句为假的时候这条后面的语句不会执行
//	//else语句没有执行的原因是它与if语句形成了一条if，else语句
//	if(a == 5)
//		if (a == 3)
//		{
//			printf("haha\n");
//		}
//		else
//		{
//			printf("干巴得");
//		}
//	return 0;
//}
//int main()
//{
//	int a = 3;
//	//当一条if语句为假的时候这条后面的语句不会执行
//	//else语句没有执行的原因是它与if语句形成了一条if，else语句
//	//这就是一个例子
//	if (a == 5)
//		if (a == 3)
//		{
//			printf("haha\n");
//		}
//		else if(a == 2)
//		{
//			printf("干巴得");
//		}
//		else
//		{
//			printf("wawawa\n");
//		}
//	return 0;
//}
//int main()
//{
//	int a = 3;
//	//当一条if语句为假的时候这条后面的语句不会执行
//	//else语句没有执行的原因是它与if语句形成了一条if，else语句
//	//这就是一个例子
//	if (a == 5)
//		if (a == 3)
//		{
//			printf("haha\n");
//		}
//		else if (a == 2)
//		{
//			printf("干巴得");
//		}
//		else
//		{
//			printf("wawawa\n");
//		}
//	if (a == 3)
//	{
//		printf("this is freedom");
//	}
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d",&a);
//	if (18 < a &&a  <= 30 )
//	{
//		printf("青年\n");
//	}
//	else if (30 < a && a <= 50)
//	{
//		printf("中年\n");
//	}
//	else if(50 < a && a<= 70 )
//	{
//		printf("中老年\n");
//	}
//	else if (70 < a && a<= 80)
//	{
//		printf("老年\n");
//	}
//	else
//	{
//		printf("老寿星\n");
//	}
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (18 < a && a <= 30)
//	{
//		printf("青年\n");
//	}
//	else
//	{ 
//		if(a > 30 && a <=50)
//		{
//			printf("中年\n");
//		}
//
//		 if (50 < a && a <= 70)
//		{
//			printf("中老年\n");
//		}
//		else if (70 < a && a <= 80)
//		{
//			printf("老年\n");
//		}
//		else
//		{
//			printf("老寿星\n");
//		}
//	}
//	return 0;
//}
//


//不能连用关系操作符
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (2 < a < 18)
//	{
//		printf("congratulations\n");
//	}
//	//haha发现一个神奇的事，上面的if语句错了，else if也不能执行了
//	else if (a > 50)
//	{
//		printf("I can,t find the go out but I also love my life\n");
//	}
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (2 < a &&a < 18)
//	{
//		printf("congratulations\n");
//	}
//	//haha发现一个神奇的事，上面的if语句错了，else if也不能执行了
//	else if (a >= 50)
//	{
//		printf("I can,t find the go out but I also love my life\n");
//	}
//	else
//	{
//		printf("we all live once,please be brave and be happy\n");
//	}
//	return 0;
//}
//
//三目操作符（条件操作符）
//int main()
//{
//	int a = 0;
//	int b = 1;
//	int ret = a > b ? a : b;
//	//规则，语句一为真则输出语句二，否则输出语句二
//	printf("%d", ret);
//
//}
//int main()
//{
//	int a = 0;
//	int b = 1;
//	if (a > b)
//	{
//		printf("%d\n", a);
//	}
//	else
//	{
//		printf("%d\n", b);
//	}
//	return 0;
//}
//&&和||
int main()
{
	int i = 0;
	int r = 0;
	int a = 2;int b = 3;int c = 4;int d = 4;
	i = a++ && ++b && --c&& d;
	printf("%d %d %d %d\n", a, b, c, d);
	//短路,这就导致第一个为一使或语句整个为真所以只执行了--a
	r = --a || ++b || ++c || d--;
	printf("%d %d %d %d\n", a, b, c, d);
	return 0;
}